#pragma once
/*--------------------------------------------------------------------------------
 * Adaptive Intelligence - Foundation Framework Class Library
 * Version 2.00
 * 
 * Progress Sub-Status Event Arguments Class
 *      Provides an event arguments class for events used to update status and sub-status during 
 * operations.
 *------------------------------------------------------------------------------*/

/*--------------------------------------------------------------------------------
 * System Imports
 *------------------------------------------------------------------------------*/
#include "stdafx.h"
#include "ProgressEventArgs.h"

using namespace System;

namespace Adaptive
{
	namespace Foundation
	{
		/// <summary>
		/// Provides an event arguments class for events used to update status and sub-status during 
		/// operations.
		/// </summary>
		/// <remarks>
		/// This class may be used to provide more complete update information to update events, log files, 
		/// or the UI when processing long-running operations with iterative sub-operations.
		/// </remarks>
		public ref class ProgressStatusEventArgs : public ProgressEventArgs
		{
		public:
			/*--------------------------------------------------------------------------------
			 * Constructor / Dispose / Destructor Methods
			 *------------------------------------------------------------------------------*/
			#pragma region Constructor / Dispose / Destructor Methods
			/// <summary>
			/// Initializes a new instance of the class.
			/// </summary>
			ProgressStatusEventArgs();
			/// <summary>
			/// Initializes a new instance of the class to the specified completion percentage.
			/// </summary>
			/// <param name="percentDone">
			/// The total overall completion percentage in the range 0 - 100.
			/// </param>
			ProgressStatusEventArgs(int percentDone);
			/// <summary>
			/// Initializes a new instance of the class to the specified status.
			/// </summary>
			/// <param name="status">
			/// The current status description text.
			/// </param>
			ProgressStatusEventArgs(String^ status);
			/// <summary>
			/// Initializes a new instance of the class to the specified status and completion percentage.
			/// </summary>
			/// <param name="status">
			/// The current status description text.
			/// </param>
			/// <param name="percentDone">
			/// The total overall completion percentage in the range 0 - 100.
			/// </param>
			ProgressStatusEventArgs(String^ status, int percentDone);
			/// <summary>
			/// Initializes a new instance of the class to the specified status and completion percentage.
			/// </summary>
			/// <param name="status">
			/// The current status description text.
			/// </param>
			/// <param name="percentDone">
			/// The total overall completion percentage in the range 0 - 100.
			/// </param>
			/// <param name="subStatus">
			/// The current sub-status description text.
			/// </param>
			/// <param name="subPercentDone">
			/// The sub-operation's completion percentage in the range 0 - 100.
			/// </param>
			ProgressStatusEventArgs(String^ status, int percentDone, String^ subStatus, int subPercentDone);
			/// <summary>
			/// Class destructor.
			/// </summary>
			~ProgressStatusEventArgs();
			#pragma endregion
			
			/*--------------------------------------------------------------------------------
			 * Public Properties
			 *------------------------------------------------------------------------------*/
			#pragma region Public Properties
			/// <summary>
			/// Gets or sets the current sub-status to be displayed.
			/// </summary>
			/// <value>
			/// A sub-status description.
			/// </value>
			property String^ SubStatus { String^ get(); void set( String^ value ); }
			/// <summary>
			/// Gets or sets the percentage completion value for the current sub-operation.
			/// </summary>
			/// <value>
			/// An integer value between 0 and 100.
			/// </value>
			property int SubPercentComplete { int get(); void set( int value ); }
			#pragma endregion

		private:
			/*--------------------------------------------------------------------------------
			 * Private Member Declarations
			 *------------------------------------------------------------------------------*/
			#pragma region Private Member Declarations
			/// <summary>
			/// Current operational status text.
			/// </summary>
			String^		_subStatus;
			/// <summary>
			/// Operational percentage completion value.
			/// </summary>
			int			_subPercentDone;
			#pragma endregion

		};
	}
}
